package javase.ch02.homeWork.Test1;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * 创建对象的方式有哪些？总结并写代码
 *   4. 通过反射创建对象
 * 什么时Java反射机制？
 *   Java 的反射机制是指在运行时获取类的结构信息（如方法、字段、构造函数）并操作对象的一种机制。反射机制提供了在运行时动态创建对象、调用方法、访问字段等功能，而无需在编译时知道这些类的具体信息。
 *   反射机制的优点：
 *          可以动态地获取类的信息，不需要在编译时就知道类的信息。
 *          可以动态地创建对象，不需要在编译时就知道对象的类型。
 *          可以动态地调用对象的属性和方法，在运行时动态地改变对象的行为。
 */
public class ReflectDemo {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, ClassNotFoundException {
        //1.获取Class对象
        Class<Teacher> teacherClass = Teacher.class;
        Constructor<Teacher> constructor = teacherClass.getConstructor(String.class);
        Teacher t2 = constructor.newInstance("数学"); // 调用有参构造
        System.out.println(t2.getSubject()); // 输出：数学

    }
}
class Teacher {
    private String subject;
    public Teacher() {}
    public Teacher(String subject) {
        this.subject = subject;
    }
    public String getSubject() { return subject; }
}
